﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Dhtl.Service.IService;
using dai_hoc_tuong_lai.Areas.Admin.Models;
using DataBase.Daihoctuonglai;
using FarmeWork.Helper;
using Comom.Project.ControllerCom;

namespace dai_hoc_tuong_lai.Areas.Admin.Controllers
{
     [Authorize(Roles = "Admin,employee")]
    public class NganhHocController : UTController
    {
        //
        // GET: /Admin/News/
        private readonly ICateNganhHoc _iCateNews;
        private readonly INganhHoc _iNews;
        private readonly int PageSize = 15;

        public NganhHocController(ICateNganhHoc iCateNews, INganhHoc iNews)
        {
            this._iCateNews = iCateNews;
            this._iNews = iNews;
        }

        #region Chuyên mục

        public ActionResult CateIndex()
        {
            return View();
        }

        public ActionResult CateList()
        {

            var listEntity = _iCateNews.List();
            List<CateNganhHocModel> model = new List<CateNganhHocModel>();
            try
            {
                foreach (var item in listEntity)
                {
                    CateNganhHocModel ml = new CateNganhHocModel();
                    CateNganhHocModel.MapFrom(item, ref  ml);
                    model.Add(ml);
                }
            }
            catch { }

            return PartialView("_CateList", model);
        }

        public ActionResult AddCate()
        {
            CateNganhHocModel model = new CateNganhHocModel();
            model.Id = 0;
            model.DateCreate = DateTime.Now;
            model.NgayTao = DateTime.Now;
            model.ParentId = 0;
            return PartialView("_AddCate", model);
        }

        public ActionResult UpdateCate(int id)
        {
            CateNganhHocModel model = new CateNganhHocModel();
            var entity = _iCateNews.GetById(id);
            try
            {
                CateNganhHocModel.MapFrom(entity, ref model);
            }
            catch { }

            return PartialView("_UpdateCate", model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddOrUpdateCate(CateNganhHocModel model)
        {

            try
            {
                if (string.IsNullOrEmpty(model.Name))
                {
                    return JsonError("Nhập tên chuyên mục ngành học vào");
                }

                var entity = new Cate_NganhHoc();
                CateNganhHocModel.MapFrom(model, ref entity);
                _iCateNews.AddOrUpdate(entity);

                return JsonSuccess(Url.Action("CateIndex"), null);
            }
            catch (Exception ex)
            {
                return JsonError(ex.ToString());
            }
        }

        public ActionResult DeleteCate(int id)
        {
            try
            {
                _iCateNews.delete(id);
                return JsonSuccess(Url.Action("CateIndex"), null);
            }
            catch (Exception ex)
            {
                return JsonError(ex.ToString());
            }
        }

        public ActionResult AllCategories(int selectedId)
        {
            var categories = _iCateNews.List();
            categories.Insert(0, new Cate_NganhHoc { Name = "[None]", Id = 0 });
            var selectList = new List<SelectListItem>();
            foreach (var c in categories)
                selectList.Add(new SelectListItem()
                {
                    Value = c.Id.ToString(),
                    Text = GetCategoryBreadCrumb(c, _iCateNews),
                    Selected = c.Id == selectedId
                });

            return new JsonResult { Data = selectList, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }

        public string GetCategoryBreadCrumb(Cate_NganhHoc category, ICateNganhHoc categoryService)
        {
            string result = string.Empty;

            try
            {
                if (category.Id == 0)
                {
                    result = "[None]";
                }
                else
                {

                    while (category != null)
                    {
                        if (String.IsNullOrEmpty(result))
                            result = category.Name;
                        else
                            result = category.Name + " >> " + result;

                        category = categoryService.GetById(category.ParentId.Value);

                    }
                }
            }
            catch { result = "[None]"; }

            return result;
        }

        #endregion

        #region Tin chi tiết

        public ActionResult Index()
        {
            var c = new List<Cate_NganhHoc>();
            c.Add(new Cate_NganhHoc { Id = 0, Name = "[Tất cả]" });
            var gh = _iCateNews.List().ToList();

            if (c.Count() > 0)
            {
                foreach (var g in gh)
                {
                    c.Add(g);
                }
            }

            ViewData["ListCatethongtin"] = new SelectList(c, "Id", "Name");

            return View();
        }

        public ActionResult List(int cateID, int page)
        {

            var listEntity = _iNews.ListByCatetId(cateID);
            List<NganhHocModel> model = new List<NganhHocModel>();
            try
            {
                foreach (var item in listEntity)
                {
                    NganhHocModel ml = new NganhHocModel();
                    NganhHocModel.MapFrom(item, ref  ml);
                    model.Add(ml);
                }
            }
            catch { }

            var ListPageSize = new PagedData<NganhHocModel>();

            if (model.Count() > 0)
            {
                ListPageSize.Data = model.Skip(PageSize * (page - 1)).Take(PageSize).ToList();
                ListPageSize.NumberOfPages = Convert.ToInt32(Math.Ceiling((double)model.Count() / PageSize));
                ListPageSize.CurrentPage = page;
            }
            else
            {
                ListPageSize.Data = null;
                ListPageSize.NumberOfPages = 0;
                ListPageSize.CurrentPage = 0;
            }

            return PartialView("_List", ListPageSize);
        }

        public ActionResult Add()
        {
            NganhHocModel model = new NganhHocModel();
            model.Id = 0;
            model.DateCreate = DateTime.Now;
            model.Cate_Id = 0;
            return View("_Add", model);
        }

        public ActionResult Update(int id)
        {
            NganhHocModel model = new NganhHocModel();
            var entity = _iNews.GetById(id);
            try
            {
                NganhHocModel.MapFrom(entity, ref model);
            }
            catch { }

            return PartialView("_Update", model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddOrUpdate(NganhHocModel model)
        {

            try
            {
                if (model.Cate_Id == 0)
                {
                    return JsonError("Chọn chuyên mục ngành học");
                }

                if (string.IsNullOrEmpty(model.Title))
                {
                    return JsonError("Nhập tiêu đề ngành học vào");
                }

                if (string.IsNullOrEmpty(model.Noidung))
                {
                    return JsonError("Nhập nội dung ngành học vào");
                }

                if (string.IsNullOrEmpty(model.Anh))
                {
                    return JsonError("Chọn ảnh đại diện");
                }

                var entity = new Nganh_Hoc();
                NganhHocModel.MapFrom(model, ref entity);
                _iNews.AddOrUpdate(entity);

                return JsonSuccess(Url.Action("Index"), null);
            }
            catch (Exception ex)
            {
                return JsonError(ex.ToString());
            }
        }

        public ActionResult Delete(int id)
        {
            try
            {
                _iNews.delete(id);
                return JsonSuccess(Url.Action("Index"), null);
            }
            catch (Exception ex)
            {
                return JsonError(ex.ToString());
            }
        }

        #endregion
    }
}
